package util;

import interfaces.IObj;
import interfaces.IPreencherJTable;
import java.util.ArrayList;
import java.util.List;
import apoio.FuncoesGerais;
import basedados.arquivos_texto.TxtIObj;

public class Transacao implements IObj, IPreencherJTable {
	public enum TipoTransacao {
		Compra, Venda, Troca
	}
	private TipoTransacao _tipoTransacao;
	private int _id;
	private short _identificadorColecionador;
	private String _horario;
	
	public void setTipoTransacao(TipoTransacao tipoTransacao) { this._tipoTransacao = tipoTransacao; }
	public TipoTransacao getTipoTransacao() { return _tipoTransacao; }
	public void setHorario(String horario) { this._horario = horario; }
	public String getHorario() { return _horario; }
	public void setIdentificadorColecionador(short identificadorColecionador) { this._identificadorColecionador = identificadorColecionador; }
	public short getIdentificadorColecionador() { return _identificadorColecionador; }
	
	public Transacao(TipoTransacao tp, short identificadorColecionador){
		setIdentificadorColecionador(identificadorColecionador);
		setTipoTransacao(tp);
	}
	public Transacao(TipoTransacao tp, int id, short identificadorColecionador){
		_id = id;
		setIdentificadorColecionador(identificadorColecionador);
		setTipoTransacao(tp);
	}

	@Override public void setCodigo(int cod) { _id = cod; }
	@Override public int getCodigo() { return _id; }

	public int getTpTransacao(TipoTransacao tp) {
		switch (tp) {
			case Compra: return 0;
			case Troca: return 1;
			case Venda: return 2;
		}
		return 0;
	}
	public TipoTransacao getTpTrans(int tp) {
		TipoTransacao rt = TipoTransacao.Compra;
		switch (tp) {
			case 0: rt = TipoTransacao.Compra; break;
			case 1: rt = TipoTransacao.Troca; break;
			case 2: rt = TipoTransacao.Venda; break;
		}
		return rt;
	}
	
	
	@Override
	public String[] getDados() {
		String[] d = new String[4];
		d[0] = String.valueOf(getCodigo());
		d[1] = String.valueOf(getIdentificadorColecionador());
		d[2] = FuncoesGerais.recuperarHorario();
		d[3] = getTpTransacao(getTipoTransacao())+"";
		return d;
	}
	
	@Override
	public void setDados(String[] dados) {
		if (dados.length < 4) return;
		setCodigo(Integer.valueOf(dados[0]));
		setIdentificadorColecionador(Short.valueOf(dados[1]));
		setHorario(dados[2]);
		setTipoTransacao(getTpTrans(Integer.valueOf(dados[3])));
	}

	@Override public IObj getInstance() { return new Albun(getIdentificadorColecionador()); }
	@Override public String getPastaeArquivo() { return "bd/transacoes_"+getIdentificadorColecionador()+".txt"; }
	
	@Override
	public String[] getTitulosJTable() {
		return new String[] {"Codigo", "Colecionador", "Horario"};
	}

	@Override
	public List<String[]> getDadosJTable() {
		List<String[]> rt = new ArrayList<String[]>();
		IObj[] objs = new TxtIObj(getInstance()).getIObjs();
		for (int i = 0; i < objs.length; i++) { rt.add(objs[i].getDados()); }
		return rt;
	}
	
	public void copy(Albun a){
		this.setDados(a.getDados());
	}
	
	/**
	 * sobrecarga toString()
	 * */
	@Override
	public String toString() {
		String rt = "";
		String[] str = getDados(); if (str==null||str.length<=0){return rt;}
		for (int i = 0; i< str.length; i++){
			rt += str[i];
			if (i < str.length-1) rt += ",";
		}
		return rt;
	}
}
